//
//  XLHomeViewModel.swift
//  SinaProjectTest
//
//  Created by zhanghaifeng on 16/10/26.
//  Copyright © 2016年 BBSWaitting. All rights reserved.
//

import UIKit

class XLHomeViewModel: NSObject {
    
    /// 增加属性
    /// 会员等级
    var mbrankImage: UIImage?
    /// 微博认证
    var verifiedImage: UIImage?
    /// 转发微博显示内容
    var retweetContent: String?
    /// 转发数 int
    var reposts_countStr: String?
    /// int	评论数
    var comments_countStr: String?
    /// int	表态数
    var attitudes_countStr: String?
    /// 来源属性
    var sourceStr: String?
    /// 时间格式化处理
    var timeStr: String?{
        // 把时间对象格式化成显示时间的字符串
        guard let createAt = statusModel?.created_at   else {
            return nil
        }
        
        let dt = DateFormatter()
        // 指定本地化信息
        dt.locale = Locale(identifier: "en_US")
        
        // 代码执行到此表示时间对象不为nil
        if isThisYear(createAt: createAt) {
            // 判断是否是今天, 昨天, 其他
            // 获取日历对象
            let calender = Calendar.current
            if calender.isDateInToday(createAt) {
                // 表示今天
                // 判断是否是1分钟, 1小时, 其他
               let timeInterval =  abs(createAt.timeIntervalSinceNow)
                if timeInterval < 60 {
                    return "刚刚"
                } else if timeInterval < 3600 {
                    let result = Int(timeInterval) / 60
                    return "\(result)分钟前"
                } else {
                    let result = Int(timeInterval) / 3600
                    return "\(result)小时前"
                }
                
                
            } else if calender.isDateInYesterday(createAt) {
                // 表示昨天
                dt.dateFormat = "昨天 HH:mm"
            } else {
                // 其他
                dt.dateFormat = "MM-dd HH:mm"
            }
            
        } else {
            // 不是今年
            dt.dateFormat = "yyyy-MM-dd HH:mm"
        }
        
        return dt.string(from: createAt)
    }
    
    // 根据发微博的时间判断是否是今年
    private func isThisYear(createAt: Date) -> Bool{
        let dt = DateFormatter()
        // 指定格式化方式
        dt.dateFormat = "yyyy"
        // 指定本地化信息
        dt.locale = Locale(identifier: "en_US")
        // 获取发微博的年份
        let createAtYear = dt.string(from: createAt)
        // 获取当前时间的年份
        let currentDateYear = dt.string(from: Date())
        
        return createAtYear == currentDateYear
    }
    
    
    // 管理 XLHomeStatusModel 对其数据进行处理
    var statusModel: XLHomeStatusModel?{
        didSet{
            // 会员等级赋值
            mbrankImage = dealUserLevelImage(mbrank: statusModel?.user?.mbrank ?? 0)
            // 微博认证赋值
            verifiedImage = dealVerifiedImage(verified: statusModel?.user?.verified ?? -1)
            // 转发微博显示内容拼接
            retweetContent = "@\(statusModel?.retweeted_status?.user?.name ?? ""):\(statusModel?.retweeted_status?.text ?? "")"
            // 转发数
            reposts_countStr = dealCount(count: statusModel?.reposts_count ?? 0, title: "转发数")
            // 评论数
            comments_countStr = dealCount(count: statusModel?.comments_count ?? 0, title: "评论数")
            // 点数
            attitudes_countStr = dealCount(count: statusModel?.attitudes_count ?? 0, title: "转发数")
            // 处理来源数据
            handleSource(source: statusModel?.source ?? "")
        }
    }
    
}
extension XLHomeViewModel{
    
    
    // 处理评论数 转发数 点赞数
    /*
     - 处理 转发 评论 赞 (业务逻辑)
     
     - 如果 count <= 0 显示 转发 评论 赞
     - 如果 count > 0 && count < 10000  是多少显示多少 例如 7890 显示就是 7890
     - 如果 count >= 10000  显示 x.x 万    例如12000  显示 就是1.2万
     - 例如 20000  显示 2万   30000 显示 3万 124455
     */
    
    func dealCount(count: Int, title: String) -> String{
        
        if count <= 0{
            return title
        }else if count > 0 && count < 10000{
            return "\(count)"
        }else{
            if (count % 10000) == 0 {
                let c:Int = count / 10000
                return "\(c)万"
            }else{
                let c:CGFloat = (CGFloat)(count / 1000) / 10
                return "\(c)万"
            }
        }
        
    }

    
    // 处理用户等级
    func dealUserLevelImage(mbrank: Int) -> UIImage?{
        if mbrank > 0 && mbrank < 7{
            return UIImage(named: "common_icon_membership_level\(mbrank)")
        }else{
            return UIImage(named: "common_icon_membership")
        }
    }
    
    /// 认证类型 -1：没有认证，1，认证用户，2,3,5: 企业认证，220: 达人
    func dealVerifiedImage(verified: Int) -> UIImage?{
        
        switch verified {
        case 1:
            return UIImage(named: "avatar_vip")
        case 2, 3, 5:
            return UIImage(named: "avatar_enterprise_vip")
        case 220:
            return UIImage(named: "avatar_grassroot")
        default:
            return UIImage(named: "avatar_vgirl")
        }
    }
    
    /// 处理数据来源
    func handleSource(source: String){
        // 多个可选类型的判断
        if let startRange = source.range(of: "\">"), let endRange = source.range(of: "</"){
            // 获取开始位置 光标索引
            // upperBound 表示范围的结束光标位置索引
            let startIndex = startRange.upperBound
            // 获取范围的开始光标的索引
            let endIndex = endRange.lowerBound
            // 获取指定范围的字符串
            let result = source.substring(with: startIndex..<endIndex)
            sourceStr = "来自: " + result
        }
        
    
    }
   
}
